package com.niiwoo.civet.user.service.duboo;

import com.alibaba.dubbo.config.annotation.Service;
import com.niiwoo.civet.user.service.UserAuthTbDubboService;
import lombok.extern.slf4j.Slf4j;

/**
 * @author zzl
 * @create 2018-11-28 17:19
 * @desc 淘宝授权Dubbo实现类
 **/
@Slf4j
@Service(version = "1.0.0")
public class UserAuthTbDubboServiceImpl implements UserAuthTbDubboService {
    @Override
    public String tbDataCallBack(String jsonString) {
        return null;
    }

    @Override
    public boolean refreshData(String userId) {
        return false;
    }
//
//    @Autowired
//    private TianchengAuthTbService tianchengAuthTbService;
//
//    @Autowired
//    private UserDataService userDataService;
//
//    @Autowired
//    private UserStatusService userStatusService;
//
//    @Reference(version = "1.0.0")
//    private TbDataDubboService tbDataDubboService;
//
//    @Autowired
//    private RedisTemplate<String, String> redisTemplate;
//
//    @Autowired
//    PrivacyMasks privacyMasks;
//
//    @Autowired
//    private TbAuthMapper tbAuthMapper;
//
//    @Autowired
//    private TianchengCallbackResolveService tianchengCallbackResolveService;
//
//    private static final String TAOBAO_AUTH_ERROR_MSG_REDIS_KEY = "taobao_auth_error_msg";
//
//    private static final String taobaoNoRealName = "未知";
//
//    @Override
//    public String tbDataCallBack(String jsonString) {
//
//        JSONObject param = JSONObject.parseObject(jsonString);
//
//        //{taskId:xxx,userId:xxxx,result:1}
//        JSONObject busiData = param.getJSONObject("busiData");
//
//        String userId = busiData.getString("userId");
//
//        log.info("淘宝数据回调userId={}参数:jsonString={}", userId, jsonString);
//
//        //result: 0=失败，1=成功, 2=仅查询用户数据
//        int result = NumberUtils.toInt(busiData.getString("result"));
//
//        //仅查询数据
//        if(result == 2){
//            //拼装天秤需要的信息
//            UserRealNameInfoDTO userRealNameInfoDTO = userDataService.getUserRealNameInfo(userId);
//            if (userRealNameInfoDTO == null) {
//                log.info("淘宝数据回调userId={}查询用户实名信息为空", userId);
//                throw new BizException("USR19076");
//            }
//            if (StringUtils.isBlank(userRealNameInfoDTO.getRealName())
//                    || StringUtils.isBlank(userRealNameInfoDTO.getIdCard())) {
//                log.info("淘宝数据回调userId={}查询用户真实姓名或身份证号为空", userId);
//                throw new BizException("USR19076");
//            }
//            //拼装天秤需要的用户信息数据
//            JSONObject userInfoObject = new JSONObject();
//            userInfoObject.put("realName", userRealNameInfoDTO.getRealName());
//            userInfoObject.put("mobilePhone", privacyMasks.decryptPrivacy(userRealNameInfoDTO.getMobileNo()));
//            userInfoObject.put("identityCard", privacyMasks.decryptPrivacy(userRealNameInfoDTO.getIdCard()));
//            userInfoObject.put("userId", userId);
//            userInfoObject.put("Message","处理成功");
//            userInfoObject.put("Result", 1);
//
//            try {
//                //加密数据
//                String busiDataEncrypt = tianchengCallbackResolveService.encryptStringBusiData(userInfoObject.toJSONString());
//                log.debug("返回天秤加密后的数据:" + busiDataEncrypt);
//                return busiDataEncrypt;
//            } catch (IOException e) {
//                log.error("返回天秤加密出现异常", e);
//                return ThirdAuthCallbackResponse.fail("加密数据异常");
//            }
//
//        }else if(result == 0){
//            //回调失败状态，可以直接修改用户的授权状态为失败
//            DataStatus dataStatus = userStatusService.getByUserIdAndType(userId, UserDataTypeEnum.TAOBAO_AUTHORIZE);
//            if(dataStatus != null && UserDataStatusEnum.TaobaoStatus.GETSUCCESS.getStatus().equals(dataStatus.getDataStatus())){
//                //不需要修改
//                log.info("淘宝数据回调userId={}的状态={}不需要修改授权状态", userId, dataStatus.getDataStatus());
//            }else {
//                DataStatus updateDataStatus = new DataStatus();
//                updateDataStatus.setDataStatus(UserDataStatusEnum.TaobaoStatus.GETFAIL.getStatus());
//                updateDataStatus.setUserId(userId);
//                updateDataStatus.setDataType(UserDataTypeEnum.TAOBAO_AUTHORIZE.getValue());
//                userStatusService.saveDataStatusByUserIdAndType(updateDataStatus);
//            }
//            return ThirdAuthCallbackResponse.success("处理成功");
//        }else if(result == 1) {
//            //回调状态是数据抓取成功，查询天秤数据
//            try {
//                boolean queryResult = this.queryAndSaveData(userId);
//                if(queryResult){
//                    return ThirdAuthCallbackResponse.success("操作成功");
//                }
//            } catch (Exception e) {
//                log.info("淘宝数据回调userId=" + userId + "数据爬取或保存异常", e);
//            }
//            return ThirdAuthCallbackResponse.fail("操作失败");
//        }else {
//            log.info("淘宝数据回调userId={},result参数错误:{}", userId, result);
//            return ThirdAuthCallbackResponse.fail("result参数错误");
//        }
//    }
//
//    @Override
//    public boolean refreshData(String userId) {
//        return queryAndSaveData(userId);
//    }
//
//    /**
//     * 查询并保存用户数据
//     * @param userId
//     * @return
//     */
//    private boolean queryAndSaveData(String userId) {
//        //查询用户基本信息
//        //拼装天秤需要的参数信息
//        UserRealNameInfoDTO userRealNameInfoDTO = userDataService.getUserRealNameInfo(userId);
//        if (userRealNameInfoDTO == null) {
//            log.info("淘宝数据回调userId={}查询用户实名信息为空", userId);
//            throw new BizException("USR19076");
//        }
//        if (StringUtils.isBlank(userRealNameInfoDTO.getRealName())
//                || StringUtils.isBlank(userRealNameInfoDTO.getIdCard())) {
//            log.info("淘宝数据回调userId={}查询用户真实姓名或身份证号为空", userId);
//            throw new BizException("USR19076");
//        }
//        log.info("淘宝数据回调userId={}查询数据开始调用", userId);
//        TbDataQueryRequest request = new TbDataQueryRequest();
//        request.setIdentityCard(privacyMasks.decryptPrivacy(userRealNameInfoDTO.getIdCard()));
//        request.setMobilePhone(privacyMasks.decryptPrivacy(userRealNameInfoDTO.getMobileNo()));
//        request.setRealName(userRealNameInfoDTO.getRealName());
//
//        CompletableFuture<TbDataQueryResponse> tbDataQueryResponseCompletableFuture = tianchengAuthTbService.dataQuery(request);
//
//        try {
//            int timeout = 20;
//            TbDataQueryResponse response = tbDataQueryResponseCompletableFuture.get(timeout, TimeUnit.SECONDS);
//            log.info("淘宝数据回调userId={},淘宝信息查询天秤返回结果：{}", userId, JSON.toJSONString(response));
//            if (response == null) {
//                log.info("淘宝数据回调userId={}查询淘宝数据天秤返回空", userId);
//                throw new BizException("USR19125");
//            }
//            if(response.getTianChengStatus()==null || response.getTianChengStatus() == 1){
//                log.info("淘宝数据回调userId={}查询淘宝数据天秤失败", userId);
//                throw new BizException("USR19125");
//            }
//            //通过此字段判断是否成功
//            boolean isTianchengDataSuccess = response.getTianChengStatus() == 0;
//
//            JSONObject jsonObject = null;
//            try {
//                String resultString = StringUtils.replace(response.getData(),"\\","");
//                jsonObject = JSONObject.parseObject(resultString);
//            }catch (Exception e){
//                log.error("淘宝数据回调userId=" + userId + "淘宝信息解析失败:"+response.getData(), e);
//                throw new BizException("USR19125");
//            }
//
//            JSONObject innerData = jsonObject.getJSONObject("data");
//            if(innerData == null){
//                log.info("淘宝数据回调userId={}淘宝信息内层data为空", userId);
//                throw new BizException("USR19125");
//            }
//            JSONObject taskData = innerData.getJSONObject("task_data");
//            if(taskData == null){
//                log.info("淘宝数据回调userId={}淘宝信息task_data为空", userId);
//                throw new BizException("USR19125");
//            }
//
//
//            TbDataSaveReqDTO tbDataSaveReqDTO = new TbDataSaveReqDTO();
//            TbAuth tbAuthInfo = new TbAuth();
//
//
//
//            //基本信息
//            JSONObject baseInfoJson = taskData.getJSONObject("base_info");
//            log.debug("基本信息："+baseInfoJson.toJSONString());
//            if(baseInfoJson != null){
//                TbDataSaveReqDTO.TbUserDTO userDTO = new TbDataSaveReqDTO.TbUserDTO();
//                userDTO.setEmail(baseInfoJson.getString("email"));
//                userDTO.setGender(baseInfoJson.getString("gender"));
//                userDTO.setIdentityCode(baseInfoJson.getString("identity_code"));
//                userDTO.setMobile(baseInfoJson.getString("mobile"));
//                userDTO.setName(baseInfoJson.getString("name"));
//                userDTO.setRealName(baseInfoJson.getString("real_name"));
//                userDTO.setUserId(userId);
//                userDTO.setUserLevel(baseInfoJson.getString("user_level"));
//                userDTO.setUserName(baseInfoJson.getString("user_name"));
//                userDTO.setVipCount(baseInfoJson.getString("vip_count"));
//                tbAuthInfo.setVipCount(NumberUtils.toInt(userDTO.getVipCount()));
//                tbDataSaveReqDTO.setTbUserDTO(userDTO);
//
//                if(taobaoNoRealName.equals(userDTO.getIdentityCode())&&taobaoNoRealName.equals(userDTO.getName())){
//                    log.info("淘宝数据回调非实名认证:userId={},tbIdentityCode={},tbName={}",userId,userDTO.getIdentityCode(),userDTO.getName());
//                    redisTemplate.opsForValue().set(TAOBAO_AUTH_ERROR_MSG_REDIS_KEY + userId, "您的淘宝账号由于未实名认证导致授权失败");
//                    isTianchengDataSuccess = false;
//                }else if(!isSelf(request.getRealName(),request.getIdentityCard(),userDTO.getIdentityCode(),userDTO.getName())){
//                    log.info("淘宝数据回调不是本人信息:userId={},niiwooRealName={},niiwooIdCard={},tbIdentityCode={},tbName={}",userId,request.getRealName(),request.getIdentityCard(),userDTO.getIdentityCode(),userDTO.getName());
//                    redisTemplate.opsForValue().set(TAOBAO_AUTH_ERROR_MSG_REDIS_KEY + userId, "您的淘宝账号由于不是本人淘宝导致授权失败");
//                    isTianchengDataSuccess = false;
//                }
//            }else{
//                log.info("淘宝数据回调基本信息为空userId={}", userId);
//                isTianchengDataSuccess = false;
//            }
//
//
//
//            Date authTime = null;
//            //修改用户授权状态
//            DataStatus dataStatus = userStatusService.getByUserIdAndType(userId, UserDataTypeEnum.TAOBAO_AUTHORIZE);
//            if(dataStatus != null && UserDataStatusEnum.TaobaoStatus.GETSUCCESS.getStatus().equals(dataStatus.getDataStatus())){
//                //不需要修改
//                authTime = dataStatus.getAuthTime();
//                log.info("淘宝授权回调，用户userId={}的状态={}不需要修改授权状态", userId, dataStatus.getDataStatus());
//            }else {
//                DataStatus updateDataStatus = new DataStatus();
//                if(isTianchengDataSuccess){
//                    updateDataStatus.setDataStatus(UserDataStatusEnum.TaobaoStatus.GETSUCCESS.getStatus());
//                }else {
//                    updateDataStatus.setDataStatus(UserDataStatusEnum.TaobaoStatus.GETFAIL.getStatus());
//                }
//                updateDataStatus.setUserId(userId);
//                updateDataStatus.setDataType(UserDataTypeEnum.TAOBAO_AUTHORIZE.getValue());
//                userStatusService.saveDataStatusByUserIdAndType(updateDataStatus);
//                authTime = new Date();
//            }
//
//            if(!isTianchengDataSuccess){
//                log.info("淘宝数据回调，用户userId={}的状态为失败", userId, dataStatus.getDataStatus());
//                return false;
//            }
//
//            //淘宝消费记录
//            JSONArray orderList = taskData.getJSONArray("order_list");
//
//            //近一年消费额
//            BigDecimal yearConsume = BigDecimal.ZERO;
//
//            if(orderList != null){
//                String orderSucessStatus = "交易成功";
//                Date yesteryear = DateUtils.addDate(authTime, Calendar.YEAR,-1);
//                for(int i=0;i<orderList.size();i++){
//                    JSONObject order=orderList.getJSONObject(i);
//                    String orderStatus = order.getString("order_status");
//                    if(!orderSucessStatus.equals(orderStatus)){
//                        continue;
//                    }
//                    String orderTime = order.getString("order_time");
//                    if(DateUtils.parseDateFromString(orderTime,null).after(yesteryear)){
//                        yearConsume = yearConsume.add(coverAmount(order.getString("order_amount")));
//                    }
//                }
//            }
//            tbAuthInfo.setYearPaySum(yearConsume);
//
//            //账户信息
//            JSONObject accountInfoJson = taskData.getJSONObject("account_info");
//            log.info("账户信息："+accountInfoJson.toJSONString());
//            if(accountInfoJson != null){
//                TbDataSaveReqDTO.TbAccountDTO accountDTO = new TbDataSaveReqDTO.TbAccountDTO();
//                accountDTO.setAccountBalance(coverAmount(accountInfoJson.getString("account_balance")));
//                accountDTO.setAvailableQuota(coverAmount(accountInfoJson.getString("available_quota")));
//                accountDTO.setConsumeQuota(coverAmount(accountInfoJson.getString("consume_quota")));
//                accountDTO.setCreditQuota(coverAmount(accountInfoJson.getString("credit_quota")));
//                accountDTO.setFinancialAccountBalance(coverAmount(accountInfoJson.getString("financial_account_balance")));
//                accountDTO.setHuabeiCurrenyPenalty(coverAmount(accountInfoJson.getString("huabei_curreny_penalty")));
//                accountDTO.setHuabeiHistoryPenalty(coverAmount(accountInfoJson.getString("huabei_history_penalty")));
//                accountDTO.setHuabeiOverdueStatus(NumberUtils.toByte(accountInfoJson.getString("huabei_overdue_status")));
//                accountDTO.setHuabeiOverdueHistory(NumberUtils.toInt(accountInfoJson.getString("huabei_overdue_history")));
//                accountDTO.setJiebeiAvailableQuota(coverAmount(accountInfoJson.getString("jiebei_available_quota")));
//                accountDTO.setJiebeiConsumeQuota(coverAmount(accountInfoJson.getString("jiebei_consume_quota")));
//                accountDTO.setJiebeiOverdueHistory(NumberUtils.toInt(accountInfoJson.getString("jiebei_overdue_history")));
//                accountDTO.setUserId(userId);
//                accountDTO.setJiebeiOverdueStatus(NumberUtils.toByte(accountInfoJson.getString("jiebei_overdue_status")));
//                accountDTO.setJiebeiQuota(coverAmount(accountInfoJson.getString("jiebei_quota")));
//                accountDTO.setJiebeiValidQuota(coverAmount(accountInfoJson.getString("jiebei_valid_quota")));
//                accountDTO.setYearConsume(yearConsume);
//                accountDTO.setZhimaPoint(NumberUtils.toInt(accountInfoJson.getString("zhima_point")));
//                tbAuthInfo.setZhimaPoint(accountDTO.getZhimaPoint());
//                tbDataSaveReqDTO.setTbAccountDTO(accountDTO);
//            }
//
//            //收货地址列表
//            JSONArray receiverList = taskData.getJSONArray("receiver_list");
//            log.debug("收货地址："+receiverList.toJSONString());
//
//
//
//            List<TbDataSaveReqDTO.TbReceiverDTO>  list = new ArrayList<>();
//
//            if(receiverList != null) {
//                for (int i = 0; i < receiverList.size(); i++) {
//                    JSONObject item = receiverList.getJSONObject(i);
//                    if(item == null){
//                        continue;
//                    }
//                    TbDataSaveReqDTO.TbReceiverDTO receiverDTO = new TbDataSaveReqDTO.TbReceiverDTO();
//                    receiverDTO.setAddress(item.getString("address"));
//                    receiverDTO.setArea(item.getString("area"));
//                    receiverDTO.setDefaultTag(NumberUtils.toByte(item.getString("default")));
//                    receiverDTO.setMobile(item.getString("mobile"));
//                    receiverDTO.setName(item.getString("name"));
//                    receiverDTO.setTelephone(item.getString("telephone"));
//                    receiverDTO.setUserId(userId);
//                    receiverDTO.setZipCode(item.getString("zip_code"));
//                    list.add(receiverDTO);
//                }
//                tbDataSaveReqDTO.setTbReceiverDTOList(list);
//            }
//
//            //保存user库简要淘宝认证信息
//            tbAuthInfo.setUpdateTime(new Date());
//            tbAuthInfo.setUserId(userId);
//            TbAuth tbAuthExists = tbAuthMapper.selectByPrimaryKey(userId);
//            if(tbAuthExists == null) {
//                tbAuthInfo.setCreateTime(new Date());
//                tbAuthMapper.insertSelective(tbAuthInfo);
//            }else {
//                tbAuthMapper.updateByPrimaryKeySelective(tbAuthInfo);
//            }
//
//            //保存到snapdata
//            try {
//                tbDataDubboService.saveData(tbDataSaveReqDTO);
//            }catch (Exception e){
//                log.error("淘宝数据回调调用snapdata保存异常", e);
//                return false;
//            }
//            log.debug("淘宝数据回调调用snapdata保存："+ JSON.toJSONString(tbDataSaveReqDTO));
//            return true;
//        }catch (Throwable e) {
//            log.error("淘宝数据回调出现异常", e);
//        }
//        return false;
//    }
//
//    /**
//     * 判断是否是本人身份证
//     * 比对脱敏部分有*号的数据
//     * @param niiwooRealName 你我系统里的真实姓名
//     * @param niiwooIdCard 你我系统里的身份证号
//     * @param tbIdentityCardId 淘宝系统里的身份证号（部门字用*脱敏）
//     * @param tbRealName 淘宝授权查询返回的真实姓名（可能部分字用*脱敏）
//     * @return
//     */
//    private static boolean isSelf(String niiwooRealName, String niiwooIdCard, String tbIdentityCardId, String tbRealName){
//        if(StringUtils.isBlank(tbIdentityCardId)&&StringUtils.isBlank(tbRealName)){
//            return false;
//        }
//        if(StringUtils.isNotBlank(tbRealName)&&!taobaoNoRealName.equals(tbRealName)){
//            if (tbRealName.length() != niiwooRealName.length()){
//                return false;
//            }
//            if(!tbRealName.equals(niiwooRealName)){
//                for(int i=0;i<tbRealName.length();i++){
//                    if(tbRealName.charAt(i) == niiwooRealName.charAt(i)
//                            ||tbRealName.charAt(i) == '*'){
//                        continue;
//                    }else {
//                        return false;
//                    }
//                }
//            }
//        }
//        if(StringUtils.isNotBlank(tbIdentityCardId) && !taobaoNoRealName.equals(tbIdentityCardId)){
//            if(tbIdentityCardId.length()!=niiwooIdCard.length()){
//                return false;
//            }
//            if(!tbIdentityCardId.equals(niiwooIdCard)){
//                for(int i=0;i<tbIdentityCardId.length();i++){
//                    if(tbIdentityCardId.charAt(i) == niiwooIdCard.charAt(i)
//                            ||tbIdentityCardId.charAt(i) == '*'){
//                        continue;
//                    }else {
//                        return false;
//                    }
//                }
//            }
//        }
//        return true;
//    }
//
//    /**
//     * 金额null处理,及分转换成元
//     * @param numberString
//     * @return
//     */
//    private static BigDecimal coverBigDecimal(String numberString) {
//        if (StringUtils.isBlank(numberString)) {
//            return BigDecimal.ZERO;
//        }
//        try {
//            BigDecimal number = new BigDecimal(numberString);
//            return number;
//        }catch (Throwable e){
//            log.error("coverBigDecimal方法异常："+numberString+"转换为BigDecimal失败!", e);
//            return BigDecimal.ZERO;
//        }
//    }
//
//    private static Date coverToDate(Long millions){
//
//        if(millions == null){
//            return null;
//        }
//        Calendar c=Calendar.getInstance();
//        c.setTimeInMillis(millions);
//
//        return c.getTime();
//    }
//
//    /**
//     * 转换分为单位的金额转换为元,默认值为零
//     * @param amount
//     * @return
//     */
//    private static BigDecimal coverAmount(String amount){
//        if(StringUtils.isBlank(amount)){
//            return null;
//        }
//        return new BigDecimal(amount).movePointLeft(2);
//    }

}
